判断hdfs文件大小

您所在的位置:网站首页 java hdfs 判断hdfs文件大小

判断hdfs文件大小

#判断hdfs文件大小| 来源: 网络整理| 查看: 265

前言:这是我负责我们小组项目的一部分,前面已经有小伙伴完成了一部分,然后由我接手继续完成,在写入这个方法的过程中,运用在课堂上所学到的知识和小组成员的讨论,在不断的探索和学习中做出成果。

项目内容

模拟生成新能源车辆数据:

编写一个程序,每天凌晨3点模拟生成当天的新能源车辆数据(字段信息必须包含:车架号、行驶总里程、车速、车辆状态、充电状态、剩余电量SOC、SOC低报警、数据生成时间等)。

要求:1、最终部署时,要将这些数据写到第一题的HDFS中。(如果有多个组做第一题,则任选一个HDFS即可);

2、车辆数据要按天存储,数据格式是JSON格式,另外如果数据文件大于100M,则另起一个文件存。每天的数据总量不少于300M。比如假设程序是2023-01-1 03点运行,那么就将当前模拟生成的数据写入到HDFS的/can_data/2023-01-01文件夹的can-2023-01-01.json文件中,写满100M,则继续写到can-2023-01-01.json.2文件中,依次类推;

3、每天模拟生成的车辆数据中,必须至少包含20辆车的数据,即要含有20个车架号(一个车架号表示一辆车,用字符串表示);

4、每天生成的数据中要有少量(20条左右)重复数据(所有字段都相同的两条数据则认为是重复数据),且同一辆车的两条数据的数据生成时间间隔两秒;

5、每天生成的数据中要混有少量前几天的数据(即数据生成时间不是当天,而是前几天的)

调用FileStatus方法

FileStatus对象封装了文件系统中文件和目录的元数据,包括文件的长度、块大小、备份数、修改时间、所有者以及权限等信息。

FileStatus对象一般由FileSystem的 getFileStatus() 方法获得,调用该方法的时候要把文件的Path传递进去。

LocatedFileStatus 的父类是 FileStatus 

java的输入输出异常包

导入这个包,可以方便对你的程序的输入输入进行很好的检测,如果程序涉及到的输入输出没有问题,程序正常运行;否则,在控制台可以抛出你的输入输出错误。对于异常,我起初也不理解。到后来就理解了,就是程序运行有可能出现你不希望的结果,为了预防这些以外(你不知道的情况下),可以用抛出异常做到很好的检测效果。大大的方便你修改代码。

import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import java.io.IOException; FileStatus字段解析 private Path path; // Path路径 private long length; // 文件长度 private boolean isdir; // 是不是目录 private short block_replication; // 块的副本数 private long blocksize; // 块大小 private long modification_time; // 修改时间 private long access_time; // 访问时间 private FsPermission permission; // 权限 private String owner; // 所有者 private String group; // 所在组 private Path symlink; // 符号链接,如果isdir为true那么symlink必须为null Configuration代码简介

创建一个Configuration对象时,其构造方法会默认加载hadoop中的两个配置文件,分别是hdfs-site.xml以及core-site.xml,这两个文件中会有访问hdfs所需的参数值,主要是fs.default.name,指定了hdfs的地址,有了这个地址客户端就可以通过这个地址访问hdfs了。即可理解为configuration就是hadoop中的配置信息。

正确使用Boolean.getBoolean()方法

Boolean.getBoolean(String name)这个方法经常误导使用者,使用者经常会以为是通过一个String的"true"转换为Boolean的true,但结果却不是这样的

想把 string="true" 转换成布尔类型 最好需要用valueOf 这个API

if(Boolean.valueOf("false")){System.out.println("false");} if(Boolean.valueOf("true")){System.out.println("true");}//true

public static boolean getBoolean(String name)当且仅当以参数命名的系统属性存在,且等于 “true” 字符串时,才返回 true。(从 JavaTM 1.0.2 平台开始,字符串的测试不再区分大

小写。)通过 getProperty 方法可访问系统属性,此方法由 System 类定义。 如果没有以指定名称命名的属性或者指定名称为空或 null,则返回 false。

参数: name - 系统属性名。 返回: 系统属性的 boolean 值。 另请参见: System.getProperty(java.lang.String), System.getProperty(java.lang.String, java.lang.String)

这里需要注意的是“系统属性”,也就是说getBoolean是用于访问Java系统属性的方法,与将字符串"true"转成boolean的true没有任何关系。 换句话说这个getBoolean不是转换方法,而是获取Java系统属性的方法。 正确用法:boolean repeatIndicator = Boolean.valueOf(“true”).booleanValue(); 或者也可以使用Boolean.parseBoolean()方法,但此方法是jdk1.5以后推出的。  

FileStatus常用函数介绍 public int compareTo(Object o) // 比较两个对象是否指向相同的路径 public long getAccessTime() // 得到访问时间 public long getBlockSize() // 得到块大小 public String getGroup() // 得到组名 public long getLen() // 得到文件大小 public long getModificationTime() // 得到修改时间 public String getOwner() // 获取所有者信息 public Path getPath() // 获取Path路径 public FsPermission getPermission() // 获取权限信息 public short getReplication() // 获取块副本数 public path getsymlink() // 获取符号链接的Path路径 public boolean isSymlink() // 是否为符号链接 public void readFields(DataInput in) // 序列化读取字段 public void setPath(final Path p) // 设置Path路径 public void setSymlink(final Path p) // 设置符号链接 public void write(DataOutput out) // 序列化写入字段 数据大小的比较 public class FileSize{ public static Boolean getFileSizeBoolean(Path fileName) throws IOException { Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://192.168.17.3:9000"); conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem"); //创建文件系统实例 FileSystem fs = FileSystem.get(conf); Long size=fs.getFileStatus(fileName).getLen(); Long sizeMax = (long) (100*1024*1024); boolean IsMax=false; if (size


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3